package org.jeecg.common.login;

import org.jeecg.common.api.vo.Result;
import org.jeecg.common.login.parameter.DoubleFactorAuthParameter;
import org.jeecg.common.login.parameter.OriginalParameter;

/**
 * 登录所需用户相关接口
 *
 * @author tianyi.jiang
 * @since 1.0.0
 */
public interface LoginService {

    /**
     * "第三方账号Id" 认证
     *
     * @param thirdId 第三方账号Id
     * @param type    类型
     * @return {@link Result}
     */
    Result<?> authByThirdAccount(String thirdId, String type);

    /**
     * 基于电话号码认证
     *
     * @param mobile 电话号码
     * @return {@link Result}
     */
    Result<?> authByMobile(String mobile);

    /**
     * [微信] 小程序免密登录 - 初始登录(To C 业务)
     *
     * @param thirdId 第三方账号Id
     * @param type    类型
     * @return {@link Result}
     */
    Result<?> auth4WechatMiniProgram(String thirdId, String type);

    /**
     * [微信] 小程序免密登录 - 注册(To C 业务)
     *
     * @param thirdId 第三方账号Id
     * @param mobile  电话号码
     * @return {@link Result}
     */
    Result<?> register4WechatMiniProgram(String thirdId, String mobile);

    /**
     * [微信] 公众号扫码登录(To C 业务)
     *
     * @param thirdId 第三方账号Id
     * @return {@link Result}
     */
    Result<?> auth4WechatPublic(String thirdId);

    /**
     * [钉钉] 小程序免密登录
     *
     * @param mobile 电话号码
     * @return {@link Result}
     */
    Result<?> auth4DingMiniProgram(String mobile);

    /**
     * 获取双因子所需参数
     *
     * @param originalParameter {@link OriginalParameter}
     * @return {@link Result}
     */
    Result<?> getDoubleFactorParameter(OriginalParameter originalParameter);

    /**
     * 记录验证码
     *
     * @param key       键名
     * @param captcha   验证码
     * @param signature 签名
     * @return {@link Result}
     */
    Result<?> writeCaptcha4DoubleFactor(String key, String captcha, String signature);

    /**
     * 双因子最终认证
     *
     * @param doubleFactorAuthParameter {@link DoubleFactorAuthParameter}
     * @return {@link Result}
     */
    Result<?> auth4DoubleFactorParameter(DoubleFactorAuthParameter doubleFactorAuthParameter);

}
